在 day20-defer 及 錯誤處理 章節中有提到錯誤的處理.
使用 panic 會導致程式碼崩潰,優美的處理方式是回傳 error
可以使用 errors package 來創建 error
package main
import (
"errors"
"fmt"
)
func main() {
fmt.Println(readConf("config.ini"))
fmt.Println(readConf("config_test.ini"))
}
func readConf(name string) error {
if name == "config.ini" {
return nil
} else {
//可以使用 errors package
return errors.New("讀取文件錯誤")
}
}
error type 是一個 interface,只需 implement Error method 並回傳 string 類型,就符合 error 類型
package main
import (
"encoding/json"
"fmt"
)
type ApiError struct {
Code int `json:"code"`
Message string `json:"message"`
}
func (a ApiError) Error() string {
//後續章節會提到如何將 struct 轉成 json格式
message, _ := json.Marshal(a)
return string(message)
}
func main() {
fmt.Println(readConf("config.ini"))
fmt.Println(readConf("config_test.ini"))
}
func readConf(name string) (err error) {
if name == "config.ini" {
return nil
} else {
err = ApiError{
Code: 10000,
Message: "讀取文件錯誤",
}
return err
}
}